"""4.2 利用numpy，计算属性距离：取出鸢尾花数据中的第一条和第二条样本数据，计算欧氏距离、曼哈顿距离和闵可夫斯基距离（对闵可夫斯基距离分别计算p1,2,3,4时的情况）"""
from sklearn.datasets import load_iris  # 从Scikit-learn第三方库中导入鸢尾花数据集
import numpy as np

iris_data = load_iris()
sample_1 = iris_data.data[0]  # 第一条样本
sample_2 = iris_data.data[1]  # 第二条样本
print("鸢尾花数据中的第一条和第二条样本数据之间的各类距离:")

# 欧氏距离
L2 = np.linalg.norm(sample_1 - sample_2, ord=2)  # 等价   np.sqrt(np.sum(np.square(sample_1-sample_2)))
print("欧氏距离：", L2, sep='\n')

# 曼哈顿距离
L1 = np.linalg.norm(sample_1 - sample_2, ord=1)
print("曼哈顿距离：", L1, sep='\n')

# 闵可夫斯基距离
P1 = np.linalg.norm(sample_1 - sample_2, ord=1)
P2 = np.linalg.norm(sample_1 - sample_2, ord=2)
P3 = np.linalg.norm(sample_1 - sample_2, ord=3)
P4 = np.linalg.norm(sample_1 - sample_2, ord=4)
print("闵可夫斯基距离(p1,2,3,4)：")
print(P1, P2, P3, P4, sep='\t')

# 切比雪夫距离
L_inf = np.linalg.norm(sample_1 - sample_2, ord=np.inf)
print("切比雪夫距离：", L_inf, sep='\n')
